package com.smedi.ismedi.personnel.core.application.query;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.smedi.ismedi.personnel.core.application.command.OrganizationAssignmentListQueryCommand;
import com.smedi.ismedi.personnel.core.application.command.PersonListQueryCommand;
import com.smedi.ismedi.personnel.core.application.query.vo.PersonDetailVo;
import com.smedi.ismedi.personnel.core.application.command.PersonOneQueryCommand;
import com.smedi.ismedi.personnel.core.application.query.vo.PersonInfoVo;
import com.smedi.ismedi.personnel.core.domain.aggregatemodel.Assignment;
import com.smedi.ismedi.personnel.core.domain.aggregatemodel.Person;
import com.smedi.ismedi.personnel.core.domain.aggregatemodel.model.OrganizationAssignment;
import com.smedi.ismedi.personnel.core.domain.aggregatemodel.model.SimplePerson;

import java.util.List;

/**
 * @Author: xulinjun
 * @Date: 2021-6-11 9:23
 */
public interface PersonQueryService {
    List<PersonInfoVo> getPersonsByCurrentHrOrganizationId(Long hrOrganizationId);

    IPage getPersonPaginationByInternalAssignment(Long offset, Long pageSize, Long hrOrganizationId, String lastName, String userName, String employeeNum);

    IPage getPersonPaginationByInternalAssignmentContainsChildren(Long offset, Long pageSize, Long hrOrganizationId, String lastName, String userName, String employeeNum);

    IPage getPersonPaginationPickUp(Long offset, Long pageSize, String lastName, String employeeNum);

    PersonInfoVo getPersonInfo(Long personId, Long hrOrganizationId);

    List<Long> getPersonIdsByLastNameAndUserNameAndEmployeeNumAndMobile(String lastName, String userName, String employeeNum, String mobile);

    List<PersonInfoVo> getPersonInfoByPersonIds(List<Long> personIds);

    List<Person> getPeopleByPersonIds(List<Long> personIds);

    IPage getPersonManagementPagination(Long offset, Long pageSize, String lastName, String userName, String employeeNum, String personType, String status, Boolean internal, Long nonOrganizationId, boolean nonAllHrOrganization);

    PersonInfoVo getPersonDetailInfo(Long personId);

    PersonInfoVo getPersonInfo(Long personId);

    List<Long> getAssignmentHrOrganizationIdsByPersonId(Long personId);

    List<Assignment> getInternalAssignmentByPersonId(Long personId);

    List<Long> getPersonIdsByOrganizationId(Long hrOrganizationId);

    List<SimplePerson> getSimplePersonList(PersonListQueryCommand personListQueryCommand);

    List<PersonDetailVo> getPersonDetailList(PersonListQueryCommand personListQueryCommand);

    List<OrganizationAssignment> getOrganizationAssignmentList(OrganizationAssignmentListQueryCommand organizationAssignmentListQueryCommand);

    SimplePerson getSimplePersonOne(PersonOneQueryCommand personOneQueryCommand);
}
